﻿using System;

namespace Calendar
{

    class Program
    {
        static void Main(string[] args)
        {
            DateTime nowtime = DateTime.Now;
            Console.WriteLine(string.Format("{0:T}", nowtime));//输出时、分、秒。
            Console.WriteLine(string.Format("{0:D}\n", nowtime));//输出完整日期
            Console.WriteLine(string.Format("{0:Y}", nowtime));//输出年月
            Console.WriteLine(" 一 二 三 四 五 六 日");

            int ThisYear = DateTime.Today.Year;                  //本日所在年
            int ThisMonth = DateTime.Today.Month;                //本日所在月
            int FirstColumn = (int)new DateTime(ThisYear, ThisMonth, 1).DayOfWeek - 1; //本月1号所在的列(令星期一为第0列)
            int DaysOfMonth = DateTime.DaysInMonth(ThisYear, ThisMonth);//本月总天数
            int DaysOfLastMonth = (int)DateTime.DaysInMonth(ThisYear - (12 - ThisMonth) / 11, ThisMonth - 1 + (1 - (ThisMonth + 10) / 12) * 12);//上月总天数

            int[] Month = new int[42];//构建一个日历即42个数的数组
            for (int i = 0; i < 42; i++)
            {
                if (i < FirstColumn)//上个月的日期
                {
                    Month[i] = DaysOfLastMonth - FirstColumn + 1 + i;
                }
                else if (i < FirstColumn + DaysOfMonth)
                {
                    Month[i] = i - FirstColumn + 1;
                }
                else
                {
                    Month[i] = i - FirstColumn - DaysOfMonth + 1;
                }

            }
            int count = 0;
            for (int i = 0; i < 42; i++)
            {
                if (i < FirstColumn)
                {
                    Console.ForegroundColor = ConsoleColor.DarkGray;//上个月的日期用灰色输出
                    Console.Write(Convert.ToString(Month[i]).PadLeft(3));
                }
                else if (i < FirstColumn + DaysOfMonth)
                {
                    Console.ForegroundColor = ConsoleColor.White;//这个月的日期用白色输出
                    Console.Write(Convert.ToString(Month[i]).PadLeft(3));
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.DarkGray;//下个月的日期用灰色输出
                    Console.Write(Convert.ToString(Month[i]).PadLeft(3));
                }

                count++;
                if (count % 7 == 0)
                {
                    Console.WriteLine();//七个日期后换行
                }
            }


        }

    }
}
